
import * as crypto from "crypto"
import { FileIoUtil } from "./FileIOUtil";
/**
 * md5计算工具
 * @author 赵占涛
 */
export class Md5Util {
    /**
     * 计算文件的md5
     * @param filePath 文件路径
     * @param cb 计算后的回调
     */
    static fileMd5(filePath:string, cb:(md5:string)=>void) {
        FileIoUtil.readFile(filePath,(data)=>{
            var h = crypto.createHash('md5');
            h.update(data);
            cb(h.digest('hex'));
        });
    }
    /**
     * 计算文件的md5，连文件名一起算
     * 算完文件的md5后，把该md5连接上文件名，再算一次md5
     * @param filePath 文件路径
     * @param cb 计算后的回调
     */
    static fileMd5CalcWithName(filePath:string, cb:(md5:string)=>void) {
        this.fileMd5(filePath, (md5:string)=>{
            var h = crypto.createHash('md5');
            h.update(md5 + filePath.substr(filePath.lastIndexOf("/")));
            cb(h.digest('hex'));
        });
    }
    /**
     * 计算一个文件的md5但是只取前5位
     * @param filePath 文件路径
     * @param cb 计算后的回调
     */
    static fileMd5Length5(filePath:string, cb:(md5:string)=>void) {
        this.fileMd5(filePath, (md5:string)=>{
            cb(md5.substr(0, 5));
        });
    }
}